package com.kai.mqtt.message.service;

import com.kai.mqtt.data.PageResult;
import com.kai.mqtt.data.request.PageRetainMessageRequest;
import com.kai.mqtt.data.response.RetainMessageResponse;
import com.kai.mqtt.message.RetainMessage;

import java.util.List;

/**
 * 保留消息存储服务
 *
 * @author weijk
 * @since 2024/6/10
 */
public interface IRetainMessageService {

    /**
     * 保存消息
     *
     * @param topic         主题
     * @param retainMessage 消息
     */
    void put(String topic, RetainMessage retainMessage);

    /**
     * 根据主题删除消息
     *
     * @param topic 主题
     */
    void remove(String topic);

    /**
     * 根据主题匹配消息列表
     *
     * @param topicFilter 主题
     * @return 消息列表
     */
    List<RetainMessage> search(String topicFilter);

    /**
     * 分页查询保留消息列表
     *
     * @param request 参数
     * @return 保留消息列表
     */
    PageResult<RetainMessageResponse> pageRetain(PageRetainMessageRequest request);

    /**
     * 删除保留消息
     *
     * @param topic 主题
     * @return true-成功，false-失败
     */
    Boolean deleteRetain(String topic);
}
